#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <stdbool.h>
#include <locale.h>
#include <time.h>
#include <conio.h>

#define WALL L'□'
#define BODY L'＃'
#define POX_X 12
#define POX_Y 4
#define FOOD L'✳'
#define KEY_PRESS(VK) ((GetAsyncKeyState(VK)&0x1) ? 1 : 0)

//蛇身的节点或者食物节点
typedef struct SnakeNode
{
	int x;
	int y;
	struct SnakeNode* Next;
}SnakeNode,* pSnakeNode;

//蛇的方向
enum SnakeDirection
{
	UP,//向上
	DOWN,//向下
	LEFT,//向左
	RIGHT//向右
};

//蛇的状态
enum SnakeStatue
{
	OK,//正常
	KILL_BY_SELF,//撞到自己
	KILL_BY_WALL,//撞到墙
	END_NOEMAL//正常退出
};

typedef struct Snake
{
	pSnakeNode _pSnake;//维护蛇头的指针
	pSnakeNode _pFood;//维护食物的指针
	int _Food_Weight;//食物权重
	int _score;//总分数
	enum SnskeDirection _dir;//蛇的方向
	enum SnakeStatue _Statue;//蛇的状态
	int _Sleep_Time;//休眠时间
}Snake,*pSnake;

//游戏运行逻辑
void Game();

//定位光标
void SetPos(int x, int y);

//游戏的初始化
void GameInit(pSnake ps);

//初始化窗口
void InitWindow();

//欢迎界面的打印
void welcome();

//地图的打印
void CreatMap();

//蛇身的初始化
void InitSnake(pSnake ps);

//食物的初始化
void InitFood(pSnake ps);

//游戏运行
void GameRun(pSnake ps);

//蛇走一步
void SnakeMove(pSnake ps);

//吃食物
void EatFood(pSnake ps, pSnakeNode pnode);

//不是食物
void NoFood(pSnake ps, pSnakeNode pnode);

//撞墙
void KillByWall(pSnake ps);

//撞到自己
void KillBySelf(pSnake ps);

//游戏结束
void GameOver(pSnake ps);